implied = \
{'All Chows': ['No Honors'],
 'All Even Pungs': ['No Honors', 'All Simples', 'All Pungs'],
 'All Fives': ['No Honors'],
 'All Green': [],
 'All Honors': ['Pung of Terminals or Honors', 'All Pungs', 'Outside Hand'],
 'All Pungs': [],
 'All Simples': ['No Honors'],
 'All Terminals': ['No Honors',
                   'Pung of Terminals or Honors',
                   'All Pungs',
                   'Outside Hand',
                   'Double Pung'],
 'All Terminals and Honors': ['Pung of Terminals or Honors',
                              'All Pungs',
                              'Outside Hand'],
 'All Types': ['Pung of Terminals or Honors'],
 'Big Four Winds': ['Big Three Winds',
                    'Pung of Terminals or Honors',
                    'Seat Wind',
                    'Prevalent Wind',
                    'All Pungs'],
 'Big Three Dragons': ['Dragon Pung',
                       'Pung of Terminals or Honors',
                       'Two Dragon Pungs'],
 'Big Three Winds': ['Pung of Terminals or Honors'],
 'Chicken Hand': [],
 'Closed Wait': [],
 'Concealed Hand': [],
 'Concealed Kong': ['Melded Kong'],
 'Double Pung': [],
 'Dragon Pung': ['Pung of Terminals or Honors'],
 'Edge Wait': [],
 'Flower Tiles': [],
 'Four Concealed Pungs': ['Two Concealed Pungs',
                          'Concealed Hand',
                          'All Pungs',
                          'Three Concealed Pungs'],
 'Four Kongs': ['Three Kongs',
                'Single Wait',
                'Melded Kong',
                'Two Melded Kongs',
                'All Pungs'],
 'Four Pure Shifted Chows': ['Short Straight', 'Pure Shifted Chows'],
 'Four Pure Shifted Pungs': ['Pure Shifted Pungs', 'All Pungs'],
 'Full Flush': ['No Honors'],
 'Fully Concealed Hand': ['Self-draw', 'Concealed Hand'],
 'Greater Honors and Knitted Tiles': ['All Types', 'Concealed Hand'],
 'Half Flush': [],
 'Knitted Straight': [],
 'Last Tile': [],
 'Last Tile Claim': [],
 'Last Tile Draw': ['Self-draw'],
 'Lesser Honors and Knitted Tiles': ['All Types', 'Concealed Hand'],
 'Little Four Winds': ['Big Three Winds', 'Pung of Terminals or Honors'],
 'Little Three Dragons': ['Dragon Pung',
                          'Pung of Terminals or Honors',
                          'Two Dragon Pungs'],
 'Lower Four': ['No Honors'],
 'Lower Tiles': ['No Honors', 'Lower Four'],
 'Melded Hand': ['Single Wait'],
 'Melded Kong': [],
 'Middle Tiles': ['No Honors', 'All Simples'],
 'Mixed Double Chow': [],
 'Mixed Shifted Chows': [],
 'Mixed Shifted Pungs': [],
 'Mixed Straight': [],
 'Mixed Triple Chows': ['Mixed Double Chow'],
 'Nine Gates': ['No Honors',
                'Pung of Terminals or Honors',
                'Full Flush',
                'Concealed Hand'],
 'No Honors': [],
 'One Voided Suit': [],
 'Out With Replacement Tile': ['Melded Kong'],
 'Outside Hand': [],
 'Prevalent Wind': ['Pung of Terminals or Honors'],
 'Pung of Terminals or Honors': [],
 'Pure Double Chow': [],
 'Pure Shifted Chows': [],
 'Pure Shifted Pungs': [],
 'Pure Straight': ['Short Straight', 'Two Terminal Chows'],
 'Pure Terminal Chows': ['All Chows',
                         'No Honors',
                         'Pure Double Chow',
                         'Two Terminal Chows',
                         'Full Flush'],
 'Pure Triple Chow': ['Pure Double Chow'],
 'Quadruple Chow': ['Pure Double Chow', 'Tile Hog', 'Pure Triple Chow'],
 'Reversible Tiles': ['One Voided Suit'],
 'Robbing the Kong': [],
 'Seat Wind': ['Pung of Terminals or Honors'],
 'Self-draw': [],
 'Seven Pairs': ['Concealed Hand'],
 'Seven Shifted Pairs': ['No Honors',
                         'Seven Pairs',
                         'Full Flush',
                         'Concealed Hand'],
 'Short Straight': [],
 'Single Wait': [],
 'Thirteen Orphans': ['All Types',
                      'All Terminals and Honors',
                      'Concealed Hand',
                      'Outside Hand',
                      #'Single Wait'
                      ],
 'Three Concealed Pungs': ['Two Concealed Pungs'],
 'Three Kongs': ['Melded Kong', 'Two Melded Kongs'],
 'Three Suited Terminal Chows': ['All Chows',
                                 'No Honors',
                                 'Two Terminal Chows',
                                 'Mixed Double Chow'],
 'Tile Hog': [],
 'Triple Pung': ['Double Pung'],
 'Two Concealed Kongs': ['Two Concealed Pungs',
                         'Melded Kong',
                         'Two Melded Kongs',
                         'Concealed Kong'],
 'Two Concealed Pungs': [],
 'Two Dragon Pungs': ['Dragon Pung', 'Pung of Terminals or Honors'],
 'Two Melded Kongs': ['Melded Kong'],
 'Two Terminal Chows': [],
 'Upper Four': ['No Honors'],
 'Upper Tiles': ['No Honors', 'Upper Four']}


def get_implied_map():
    """
    >>> get_implied_map()['Nine Gates']
    ['No Honors', 'Pung of Terminals or Honors', 'Full Flush', 'Concealed Hand']
    """
    global implied
    return implied

def _test():
    import doctest
    doctest.testmod()

if __name__ == "__main__":
    _test()

